home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
ARASAN_S.ZIP
/
OPTIONS.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-12
|
5KB
|
171 lines
// Copyright 1994 by Jon Dart. All Rights Reserved.
#include "options.h"
#include <stdlib.h> // for atoi
static const char ini_file[] = "arasan.ini";
static const char *keys[] =
{ "Primary Time Control", "Secondary Time Control" };
static const char *src_names[] =
{ "Ply", "Time", "Game", "Tournament", "None", 0 };
#ifdef WINDOWS
void Options::get_src_opts( const Control c,
Search_Type &my_search_type, Search_Limit &my_search_limit)
{
char opt_str[80];
GetPrivateProfileString(keys[c],"Search Type",
(c == First) ? "Ply" : "None",
(LPSTR)opt_str,80,ini_file);
const char **p = src_names;
int type = 0;
while (*p)
{
if (strcmp(opt_str,*p)==0)
break;
++type; ++p;
}
assert(type < 5);
my_search_type = (Search_Type)type;
switch (type)
{
case 0:
GetPrivateProfileString(keys[c],"ply","2",
(LPSTR)opt_str,80,ini_file);
my_search_limit.max_ply = atoi(opt_str);
break;
case 1:
GetPrivateProfileString(keys[c],"Seconds","60",
(LPSTR)opt_str,80,ini_file);
my_search_limit.seconds = atoi(opt_str);
break;
case 2:
GetPrivateProfileString(keys[c],"Minutes","60",
(LPSTR)opt_str,80,ini_file);
my_search_limit.limit.minutes = atoi(opt_str);
break;
case 3:
GetPrivateProfileString(keys[c],"Moves","60",
(LPSTR)opt_str,80,ini_file);
my_search_limit.limit.moves = atoi(opt_str);
GetPrivateProfileString(keys[c],"Minutes","60",
(LPSTR)opt_str,80,ini_file);
my_search_limit.limit.minutes = atoi(opt_str);
break;
default:
break;
}
}
void Options::set_src_opts( const Control c,
const Search_Type my_search_type,
const Search_Limit &my_search_limit)
{
char msg[40];
WritePrivateProfileString(keys[c],"Search Type",src_names[my_search_type],
ini_file);
switch (my_search_type)
{
case Fixed_Ply:
wsprintf(msg,"%d",my_search_limit.max_ply);
WritePrivateProfileString(keys[c],"ply",msg,ini_file);
break;
case Time_Limit:
wsprintf(msg,"%ld",my_search_limit.seconds);
WritePrivateProfileString(keys[c],"Seconds",msg,ini_file);
break;
case Game:
wsprintf(msg,"%d",my_search_limit.limit.minutes);
WritePrivateProfileString(keys[c],"Minutes",msg,ini_file);
break;
case Tournament:
wsprintf(msg,"%d", my_search_limit.limit.moves);
WritePrivateProfileString(keys[c],"Moves",msg,ini_file);
wsprintf(msg,"%d", my_search_limit.limit.minutes);
WritePrivateProfileString(keys[c],"Minutes",msg,ini_file);
break;
case None:
WritePrivateProfileString(keys[c],"Search Type","None",
ini_file);
}
}
#endif
Options::Options()
{
Search_Limit my_search_limit;
Search_Type my_search_type;
#ifdef WINDOWS
char opt_str[80];
get_src_opts(First, my_search_type, my_search_limit);
tc[0] = Time_Control(my_search_type, my_search_limit);
get_src_opts(Second, my_search_type, my_search_limit );
tc[1] = Time_Control(my_search_type, my_search_limit);
GetPrivateProfileString("Preferences","Beep After Move","True",
(LPSTR)opt_str,80,ini_file);
prefs.beep_after_move = (strcmp(opt_str,"True")==0) ;
GetPrivateProfileString("Preferences","Beep On Error","True",
(LPSTR)opt_str,80,ini_file);
prefs.beep_on_error = (strcmp(opt_str,"True")==0) ;
GetPrivateProfileString("Preferences","Can Resign","True",
(LPSTR)opt_str,80,ini_file);
prefs.can_resign = (strcmp(opt_str,"True")==0) ;
GetPrivateProfileString("Preferences","Use Book","True",
(LPSTR)opt_str,80,ini_file);
prefs.use_book = (strcmp(opt_str,"True")==0) ;
GetPrivateProfileString("Preferences","Think When Idle","True",
(LPSTR)opt_str,80,ini_file);
prefs.think_when_idle = (strcmp(opt_str,"True")==0) ;
#else
// set some default options
my_search_type = Fixed_Ply;
my_search_limit.max_ply = 2;
prefs.beep_after_move = True;
prefs.beep_on_error = True;
prefs.can_resign = True;
prefs.randomize_moves = False;
prefs.use_book = True;
prefs.think_when_idle = False;
tc[0] = Time_Control(Fixed_Ply,my_search_limit);
tc[1] = Time_Control(None,my_search_limit);
#endif
}
Options::~Options()
{
save();
}
void Options::get_preferences( Preferences &p )
{
p = prefs;
}
void Options::update_preferences( const Preferences &p)
{
prefs = p;
}
void Options::save()
{
#ifdef WINDOWS
set_src_opts(First,tc[0].get_search_type(),
tc[0].get_search_limit());
set_src_opts(Second,tc[1].get_search_type(),
tc[1].get_search_limit());
static char *boolImage[2] = { "False", "True" };
WritePrivateProfileString("Preferences","Beep After Move",
boolImage[(int)beep_after_move()],ini_file);
WritePrivateProfileString("Preferences","Beep On Error",
boolImage[(int)beep_on_error()],ini_file);
WritePrivateProfileString("Preferences","Can Resign",
boolImage[(int)can_resign()],ini_file);
WritePrivateProfileString("Preferences","Use Book",
boolImage[(int)use_book()],ini_file);
WritePrivateProfileString("Preferences","Think When Idle",
boolImage[(int)think_when_idle()],ini_file);
#endif
}